home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.3)
-
- import win32file
- import win32event
- import win32con
- from serialutil import *
- VERSION = '$Revision: 1.27 $'.split()[1]
- MS_CTS_ON = 16
- MS_DSR_ON = 32
- MS_RING_ON = 64
- MS_RLSD_ON = 128
-
- def device(portnum):
- if portnum < 9:
- return 'COM%d' % (portnum + 1)
- else:
- return '\\\\.\\COM%d' % (portnum + 1)
-
-
- class Serial(SerialBase):
- BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200)
-
- def open(self):
- if self._port is None:
- raise SerialException('Port must be configured before it can be used.')
-
- self.hComPort = None
-
- try:
- self.hComPort = win32file.CreateFile(self.portstr, win32con.GENERIC_READ | win32con.GENERIC_WRITE, 0, None, win32con.OPEN_EXISTING, win32con.FILE_ATTRIBUTE_NORMAL | win32con.FILE_FLAG_OVERLAPPED, None)
- except Exception:
- msg = None
- self.hComPort = None
- raise SerialException('could not open port: %s' % msg)
-
- win32file.SetupComm(self.hComPort, 4096, 4096)
- self._orgTimeouts = win32file.GetCommTimeouts(self.hComPort)
- self._reconfigurePort()
- win32file.PurgeComm(self.hComPort, win32file.PURGE_TXCLEAR | win32file.PURGE_TXABORT | win32file.PURGE_RXCLEAR | win32file.PURGE_RXABORT)
- self._overlappedRead = win32file.OVERLAPPED()
- self._overlappedRead.hEvent = win32event.CreateEvent(None, 1, 0, None)
- self._overlappedWrite = win32file.OVERLAPPED()
- self._overlappedWrite.hEvent = win32event.CreateEvent(None, 0, 0, None)
- self._isOpen = True
-
-
- def _reconfigurePort(self):
- if not (self.hComPort):
- raise SerialException('Can only operate on a valid port handle')
-
- if self._timeout is None:
- timeouts = (0, 0, 0, 0, 0)
- elif self._timeout == 0:
- timeouts = (win32con.MAXDWORD, 0, 0, 0, 0)
- else:
- timeouts = (0, 0, int(self._timeout * 1000), 0, 0)
- win32file.SetCommTimeouts(self.hComPort, timeouts)
- win32file.SetCommMask(self.hComPort, win32file.EV_ERR)
- comDCB = win32file.GetCommState(self.hComPort)
- comDCB.BaudRate = self._baudrate
- if self._bytesize == FIVEBITS:
- comDCB.ByteSize = 5
- elif self._bytesize == SIXBITS:
- comDCB.ByteSize = 6
- elif self._bytesize == SEVENBITS:
- comDCB.ByteSize = 7
- elif self._bytesize == EIGHTBITS:
- comDCB.ByteSize = 8
- else:
- raise ValueError('Unsupported number of data bits: %r' % self._bytesize)
- if self._parity == PARITY_NONE:
- comDCB.Parity = win32file.NOPARITY
- comDCB.fParity = 0
- elif self._parity == PARITY_EVEN:
- comDCB.Parity = win32file.EVENPARITY
- comDCB.fParity = 1
- elif self._parity == PARITY_ODD:
- comDCB.Parity = win32file.ODDPARITY
- comDCB.fParity = 1
- else:
- raise ValueError('Unsupported parity mode: %r' % self._parity)
- if self._stopbits == STOPBITS_ONE:
- comDCB.StopBits = win32file.ONESTOPBIT
- elif self._stopbits == STOPBITS_TWO:
- comDCB.StopBits = win32file.TWOSTOPBITS
- else:
- raise ValueError('Unsupported number of stop bits: %r' % self._stopbits)
- comDCB.fBinary = 1
- if self._rtscts:
- comDCB.fRtsControl = win32file.RTS_CONTROL_HANDSHAKE
- comDCB.fDtrControl = win32file.DTR_CONTROL_HANDSHAKE
- else:
- comDCB.fRtsControl = win32file.RTS_CONTROL_ENABLE
- comDCB.fDtrControl = win32file.DTR_CONTROL_ENABLE
- comDCB.fOutxCtsFlow = self._rtscts
- comDCB.fOutxDsrFlow = self._rtscts
- comDCB.fOutX = self._xonxoff
- comDCB.fInX = self._xonxoff
- comDCB.fNull = 0
- comDCB.fErrorChar = 0
- comDCB.fAbortOnError = 0
- win32file.SetCommState(self.hComPort, comDCB)
-
-
- def close(self):
- if self._isOpen:
- if self.hComPort:
- win32file.SetCommTimeouts(self.hComPort, self._orgTimeouts)
- win32file.CloseHandle(self.hComPort)
- self.hComPort = None
-
- self._isOpen = False
-
-
-
- def makeDeviceName(self, port):
- return device(port)
-
-
- def inWaiting(self):
- (flags, comstat) = win32file.ClearCommError(self.hComPort)
- return comstat.cbInQue
-
-
- def read(self, size = 1):
- if not (self.hComPort):
- raise portNotOpenError
-
- if size > 0:
- win32event.ResetEvent(self._overlappedRead.hEvent)
- (flags, comstat) = win32file.ClearCommError(self.hComPort)
- if self.timeout == 0:
- n = min(comstat.cbInQue, size)
- if n > 0:
- (rc, buf) = win32file.ReadFile(self.hComPort, win32file.AllocateReadBuffer(n), self._overlappedRead)
- win32event.WaitForSingleObject(self._overlappedRead.hEvent, win32event.INFINITE)
- read = str(buf)
- else:
- read = ''
- else:
- (rc, buf) = win32file.ReadFile(self.hComPort, win32file.AllocateReadBuffer(size), self._overlappedRead)
- n = win32file.GetOverlappedResult(self.hComPort, self._overlappedRead, 1)
- read = str(buf[:n])
- else:
- read = ''
- return read
-
-
- def write(self, s):
- if not (self.hComPort):
- raise portNotOpenError
-
- if s:
- (err, n) = win32file.WriteFile(self.hComPort, s, self._overlappedWrite)
- if err:
- win32event.WaitForSingleObject(self._overlappedWrite.hEvent, win32event.INFINITE)
-
-
-
-
- def flushInput(self):
- if not (self.hComPort):
- raise portNotOpenError
-
- win32file.PurgeComm(self.hComPort, win32file.PURGE_RXCLEAR | win32file.PURGE_RXABORT)
-
-
- def flushOutput(self):
- if not (self.hComPort):
- raise portNotOpenError
-
- win32file.PurgeComm(self.hComPort, win32file.PURGE_TXCLEAR | win32file.PURGE_TXABORT)
-
-
- def sendBreak(self):
- if not (self.hComPort):
- raise portNotOpenError
-
- import time
- win32file.SetCommBreak(self.hComPort)
- time.sleep(0.02)
- win32file.ClearCommBreak(self.hComPort)
-
-
- def setRTS(self, level = 1):
- if not (self.hComPort):
- raise portNotOpenError
-
- if level:
- win32file.EscapeCommFunction(self.hComPort, win32file.SETRTS)
- else:
- win32file.EscapeCommFunction(self.hComPort, win32file.CLRRTS)
-
-
- def setDTR(self, level = 1):
- if not (self.hComPort):
- raise portNotOpenError
-
- if level:
- win32file.EscapeCommFunction(self.hComPort, win32file.SETDTR)
- else:
- win32file.EscapeCommFunction(self.hComPort, win32file.CLRDTR)
-
-
- def getCTS(self):
- if not (self.hComPort):
- raise portNotOpenError
-
- return MS_CTS_ON & win32file.GetCommModemStatus(self.hComPort) != 0
-
-
- def getDSR(self):
- if not (self.hComPort):
- raise portNotOpenError
-
- return MS_DSR_ON & win32file.GetCommModemStatus(self.hComPort) != 0
-
-
- def getRI(self):
- if not (self.hComPort):
- raise portNotOpenError
-
- return MS_RING_ON & win32file.GetCommModemStatus(self.hComPort) != 0
-
-
- def getCD(self):
- if not (self.hComPort):
- raise portNotOpenError
-
- return MS_RLSD_ON & win32file.GetCommModemStatus(self.hComPort) != 0
-
-
- def setXON(self, level = True):
- if not (self.hComPort):
- raise portNotOpenError
-
- if level:
- win32file.EscapeCommFunction(self.hComPort, win32file.SETXON)
- else:
- win32file.EscapeCommFunction(self.hComPort, win32file.SETXOFF)
-
-
- if __name__ == '__main__':
- print __name__
- s = Serial()
- print s
- s = Serial(0)
- print s
- s.baudrate = 19200
- s.databits = 7
- s.close()
- s.port = 3
- s.open()
- print s
-
-